package com.lhd.tool;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class DateTool {

	private static String BEG_DATE = "2012-01-01";
	private static String END_DATE = "2025-01-01";

	private static long random(long begin, long end) {
		long rtn = begin + (long) (Math.random() * (end - begin));
		// 如果返回的是开始时间和结束时间，则递归调用本函数查找随机值
		if (rtn == begin || rtn == end) {
			return random(begin, end);
		}
		return rtn;
	}

	/**
	 * 
	 * @return 随机日期 yyyymmdd
	 */
	public String getRandomDate() {
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

			Date start = sdf.parse(BEG_DATE); // 构造开始日期
			Date end = sdf.parse(END_DATE); // 构造结束日期

			// getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

			if (start.getTime() >= end.getTime()) {
				return "99991231";
			}

			long date = random(start.getTime(), end.getTime());

			return sdf.format(new Date(date));

		} catch (Exception e) {
			log.error(e.getMessage());
		}
		return "99991231";
	}

	/**
	 * 
	 * @return 随机时间hhmmss
	 */
	public String getRandomTime() {
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("hhmmss");

			Date start = sdf.parse(BEG_DATE); // 构造开始日期
			Date end = sdf.parse(END_DATE); // 构造结束日期

			// getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

			if (start.getTime() >= end.getTime()) {
				return "000000";
			}

			long date = random(start.getTime(), end.getTime());

			return sdf.format(new Date(date));

		} catch (Exception e) {
			log.error(e.getMessage());
		}
		return "000000";
	}

	/**
	 * 
	 * @return 当前日期 YYYYMMDD
	 */
	public String getCurrentDate() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		Date date = new Date();
		return sdf.format(date);
	}

	/**
	 * 
	 * @return 未来随机日期 YYYYMMDD
	 */
	public String getFutureDate() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		Calendar cal = Calendar.getInstance();
		int num = (int) (Math.random() * 1000);

		cal.add(Calendar.DAY_OF_YEAR, num);

		String start = sdf.format(cal.getTime());

		return start;
	}

	public String getCurrentTime() {
		Date date = new Date();
		SimpleDateFormat ft = new SimpleDateFormat("hhmmss");
		return ft.format(date);
	}

	public static void main(String agrs[]) {
		String date = new DateTool().getRandomDate();
		String time = new DateTool().getCurrentDate();
		System.out.println(date);
		System.out.println(time);
	}
}